package com.zhijian.medical.enums.diagnose.report;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 胃癌报告枚举
 */
@Slf4j
public class StomachEnum {

    /**
     * 其他送检组织
     */
    @AllArgsConstructor
    @Getter
    public enum OtherInspectionOrganizationsEnum {

        GASTRIC_TISSUE("gastric_tissue", "胃组织"),
        ANASTOMOTIC_SITE_NEAR_END("anastomotic_site_near_end", "吻合口近端"),
        ANASTOMOTIC_SITE_REMOTE_END("anastomotic_site_remote_end", "吻合口远端");

        private final String key;
        private final String desc;


        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(OtherInspectionOrganizationsEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 分析结果表达式
     */
    @AllArgsConstructor
    @Getter
    public enum AnalysisResultsExpressionEnum {

        PLUS("+", "+"),
        REDUCE("-", "-"),
        ZERO("0", "0"),
        PLUS1("1+", "1+"),
        PLUS2("2+", "2+"),
        PLUS3("3+", "3+"),
        PLUS_OR_MINUS("±", "±");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(AnalysisResultsExpressionEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * MMR状态
     */
    @AllArgsConstructor
    @Getter
    public enum MmrStatusEnum {

        DMMR("+", "错配修复功能缺陷（dMMR）"),
        PMMR("-", "错配修复功能完整（pMMR）");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(MmrStatusEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 错配修复蛋白表达
     */
    @AllArgsConstructor
    @Getter
    public enum MismatchRepairProteinExpressionEnum {

        NO_LOSS_OF_EXPRESSION_OBSERVED("no_loss_of_expression_observed", "表达未见丢失"),
        MLH1_EXPRESSION_IS_VISIBLY_LOST("mlh1_expression_is_visibly_lost", "MLH1表达可见丢失"),
        PMS2_EXPRESSION_IS_VISIBLY_LOST("pms2_expression_is_visibly_lost", "PMS2表达可见丢失"),
        MSH2_EXPRESSION_IS_VISIBLY_LOST("msh2_expression_is_visibly_lost", "MSH2表达可见丢失"),
        VISIBLE_LOSS_OF_MSH6_EXPRESSION("visible_loss_of_msh6_expression", "MSH6表达可见丢失");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(MismatchRepairProteinExpressionEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }


    /**
     * 免疫组化-表达式
     */
    @AllArgsConstructor
    @Getter
    public enum ImmunohistochemistryExpressionEnum {

        PLUS("+", "+"),
        REDUCE("-", "-"),
        PLUS2("++", "++"),
        PLUS3("+++", "+++"),
        PLUS_OR_MINUS("±", "±");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(ImmunohistochemistryExpressionEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 免疫组化-其他表达
     */
    @AllArgsConstructor
    @Getter
    public enum ImmunohistochemistryOtherExpressionEnum {

        LYMPHOCYTE_EXPRESSION("lymphocyte_expression", "淋巴细胞表达"),
        VASCULAR_EXPRESSION("vascular_expression", "脉管表达"),
        IMMUNE_CELL_EXPRESSION("immune_cell_expression", "间质免疫细胞表达");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(ImmunohistochemistryOtherExpressionEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }


    /**
     * 远处转移
     */
    @AllArgsConstructor
    @Getter
    public enum DistantTransferEnum {

        CM0("cm0", "cM0床无远处转移"),
        CM1("cm1", "cM1临床有远处转移"),
        PM1("pm1", "pM1病理査有近外装移"),
        MX("mx", "Mx未知");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(DistantTransferEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 淋巴结
     */
    @AllArgsConstructor
    @Getter
    public enum LymphGlandEnum {

        NOT_TRANSFERRED("not_transferred", "未见转移"),
        SEE_TRANSFER("see_transfer", "见转移"),
        ADIPOSE_TISSUE("adipose_tissue", "脂肪组织"),
        GRANULOMATOUS_INFLAMMATION("granulomatous_inflammation", "肉芽肿性炎"),
        OTHER("other", "其他");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(LymphGlandEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 网膜组织
     */
    @AllArgsConstructor
    @Getter
    public enum OmentalTissueEnum {

        NO_ABNORMAL_CONDITIONS("no_abnormal_conditions", "未见明显异常"),
        SEE_CANCER_NODULES("see_cancer_nodules", "见癌结节"),
        OBSERVATION_OF_CANCER_TISSUE_INFILTRATION("observation_of_cancer_tissue_infiltration", "见癌组织浸润"),
        SEEN_INTRAVASCULAR_CANCER_THROMBUS("seen_intravascular_cancer_thrombus", "见脉管内癌栓"),
        OTHER("other", "其他");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(OmentalTissueEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }


    /**
     * 周围胃黏膜
     */
    @AllArgsConstructor
    @Getter
    public enum SurroundingGastricMucosaEnum {

        MODERATE_CHRONIC_NON_ATROPHIC_GASTRITIS("moderate_chronic_non_atrophic_gastritis", "中度慢性非萎缩性胃炎"),
        MILD_CHRONIC_NON_ATROPHIC_GASTRITIS("mild_chronic_non_atrophic_gastritis", "轻度慢性非萎缩性胃炎"),
        MILD_CHRONIC_ATROPHIC_GASTRITIS_WITH_INTESTINAL_METAPLASIA("mild_chronic_atrophic_gastritis_with_intestinal_metaplasia", "轻度慢性萎缩性胃炎伴肠上皮化生"),
        NO_OBVIOUS_ABNORMALITIES_WERE_OBSERVED("no_obvious_abnormalities_were_observed", "未见明显异常");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(SurroundingGastricMucosaEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 吻合圈情况
     */
    @AllArgsConstructor
    @Getter
    public enum MatchingCircleSituationEnum {

        NO_VISIBLE_INCISIONAL_MARGIN_ON_THE_ORAL_SIDE("no_visible_incisional_margin_on_the_oral_side", "口侧切缘未见"),
        ANAL_MARGIN_NOT_SEEN("anal_margin_not_seen", "肛侧切缘未见"),
        MOUTH_SIDE_CUTTING_EDGE_INVOLVED("mouth_side_cutting_edge_involved", "口侧切缘见癌组织累及"),
        ANAL_MARGIN_INVOLVED("anal_margin_involved", "肛侧切缘见癌组织累及"),
        mouth_side_cutting_edge_specimen("mouth_side_cutting_edge_specimen", "口侧切缘紧靠标本切缘"),
        MILD_CHRONIC_ATROPHIC_GASTRITIS_WITH_INTESTINAL_METAPLASIA("anal_margin_specimen", "肛侧切缘癌组织紧靠标本切缘"),
        NOT_APPLICABLE("not_applicable", "不适用");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(MatchingCircleSituationEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 下切缘/上切缘
     */
    @AllArgsConstructor
    @Getter
    public enum LowerCuttingEdgeEnum {

        NO_FOUND("no_found", "未见"),
        CANCER_INVOLVEMENT("cancer_involvement", "癌组织累及"),
        ADJACENT_TO_THE_SPECIMEN("adjacent_to_the_specimen", "癌组织紧靠标本切缘");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(LowerCuttingEdgeEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 神经侵犯
     */
    @AllArgsConstructor
    @Getter
    public enum NeurologicalInvasionEnum {

        NOT_YET_SEEN("not_yet_seen", "未见侵犯"),
        VISIBLE("visible", "见侵犯"),
        SUSPICIOUS("suspicious", "可疑"),
        UNABLE_TO_EVALUATE("unable_to_evaluate", "无法评估");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(NeurologicalInvasionEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }


    /**
     * 脉管癌栓
     */
    @AllArgsConstructor
    @Getter
    public enum VascularCancerThrombusEnum {

        NOT_YET_SEEN("not_yet_seen", "末见癌栓"),
        VISIBLE("visible", "见癌栓"),
        SUSPICIOUS("suspicious", "可疑"),
        UNABLE_TO_EVALUATE("unable_to_evaluate", "无法评估");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(VascularCancerThrombusEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 浸润方式
     */
    @AllArgsConstructor
    @Getter
    public enum InfiltrationMethodEnum {

        PUSH_AND_PUSH_INFILTRATION("push_and_push_infiltration", "推挤式浸润"),
        DIFFUSE_INFILTRATION("diffuse_infiltration", "弥漫性浸润"),
        MIXED_INFILTRATION("mixed_infiltration", "混合性浸润");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(InfiltrationMethodEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 浸润深度
     */
    @AllArgsConstructor
    @Getter
    public enum DepthOfInfiltrationEnum {

        INTRINSIC_LAYER("intrinsic_layer", "固有层（T1a）"),
        MUCOSAL_MUSCLE_LAYER("mucosal_muscle_layer", "黏膜肌层（T1a）"),
        SUBMUCOSAL_LAYER("submucosal_layer", "黏膜下层（T1b）"),
        INTRINSIC_MUSCLE_LAYER("intrinsic_muscle_layer", "固有肌层（T2）"),
        SUBSEROSAL_LAYER("subserosal_layer", "浆膜下层（T3）"),
        ADJACENT_ORGANS_AND_TISSUES("adjacent_organs_and_tissues", "邻B近组织器官（T4）");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(DepthOfInfiltrationEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 粘液分型
     */
    @AllArgsConstructor
    @Getter
    public enum MucusClassificationEnum {

        INTRINSIC_LAYER("intrinsic_layer", "胃型"),
        MUCOSAL_MUSCLE_LAYER("mucosal_muscle_layer", "肠型"),
        SUBMUCOSAL_LAYER("submucosal_layer", "混合型"),
        INTRINSIC_MUSCLE_LAYER("intrinsic_muscle_layer", "裸表型/null型");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(MucusClassificationEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 肿瘤级别
     */
    @AllArgsConstructor
    @Getter
    public enum TumorGradeEnum {

        HIGHLY_DIFFERENTIATED("highly_differentiated", "高分化（G1）"),
        MODERATE_DIFFERENTIATION("moderate_differentiation", "中分化（G2）"),
        LOW_DIFFERENTIATION("low_differentiation", "低分化（G3）"),
        TERMINAL_DIFFERENTIATION("terminal_differentiation", "末分化（G4）"),
        MEDIUM_TO_HIGH_DIFFERENTIATION("medium_to_high_differentiation", "中-高分化（G1-G2）"),
        MEDIUM_LOW_DIFFERENTIATION("medium_low_differentiation", "中-低分化（G2-G3）"),
        UNABLE_TO_EVALUATE("unable_to_evaluate", "无法评估（GX）");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(TumorGradeEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * Slewent分型
     */
    @AllArgsConstructor
    @Getter
    public enum SlewenClassificationEnum {

        I1("I1", "III型"),
        I2("I2", "II型"),
        I3("I3", "I型");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(SlewenClassificationEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * Lauren分型
     */
    @AllArgsConstructor
    @Getter
    public enum LaurenClassificationEnum {

        INTESTINAL_TYPE("intestinal_type", "肠型"),
        DIFFUSE_TYPE("diffuse_type", "弥漫型"),
        MIXED_TYPE("mixed_type", "混合型"),
        UNCERTAIN_TYPE("uncertain_type", "不确定类型");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(LaurenClassificationEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }


    /**
     * 百分比
     */
    @AllArgsConstructor
    @Getter
    public enum PercentageEnum {

        P0(0, "0"),
        P10(10, "10"),
        P20(20, "20"),
        P30(30, "30"),
        P40(40, "40"),
        P50(50, "50"),
        P60(60, "60"),
        P70(70, "70"),
        P80(80, "80"),
        P90(90, "90"),
        P100(100, "100");

        private final Integer key;
        private final String desc;

        private static final List<MappingEnum<Integer, String>> TEMP_MAPPING = Arrays.stream(PercentageEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<Integer, String>> getList() {
            return TEMP_MAPPING;
        }
    }


    /**
     * WHO组织学分型
     */
    @AllArgsConstructor
    @Getter
    public enum WhoOrganizationCreditTypeEnum {

        TUBULAR_ADENOCARCINOMA("tubular_adenocarcinoma", "管状腺癌"),
        PAPILLARY_ADENOCARCINOMA("papillary_adenocarcinoma", "乳头状腺癌"),
        MICROPAPILLARY_CARCINOMA("micropapillary_carcinoma", "微乳头状癌"),
        SOLID_NEST_ADENOCARCINOMA("solid_nest_adenocarcinoma", "实性巢状腺癌"),
        LOW_ADHESION_ADENOCARCINOMA("low_adhesion_adenocarcinoma", "低黏附型腺癌"),
        SIGNET_RING_CELL_CARCINOMA("signet_ring_cell_carcinoma", "印戒细胞癌"),
        MUCINOUS_ADENOCARCINOMA("mucinous_adenocarcinoma", "黏液腺癌"),
        NEUROENDOCRINE_CARCINOMA("neuroendocrine_carcinoma", "神经内分泌癌"),
        NON_NEUROENDOCRINE_CARCINOMA("non_neuroendocrine_carcinoma", "神经内分泌-非神经内分泌癌"),
        ADENOSQUAMOUS_CELL_CARCINOMA("adenosquamous_cell_carcinoma", "腺-鳞状細胞癌"),
        MYELOID_CARCINOMA_WITH_LYMPHOID_STROMA("myeloid_carcinoma_with_lymphoid_stroma", "伴有淋巴间质的髓样癌"),
        HEPATOID_ADENOCARCINOMA("hepatoid_adenocarcinoma", "肝样腺癌"),
        CHARACTERISTICS_OF_INTESTINAL_PROGENITOR_CELLS("characteristics_of_intestinal_progenitor_cells", "具有肠母细胞特征的腺癌"),
        GASTROINTESTINAL_STROMAL_TUMOR("gastrointestinal_stromal_tumor", "胃肠道间质瘤"),
        OTHER("other", "其他");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(WhoOrganizationCreditTypeEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }


    /**
     * 巨检分型
     */
    @AllArgsConstructor
    @Getter
    public enum MacroscopicClassificationEnum {

        EARLY_STAGE_RAISED_TYPE("early_stage_raised_type", "早期-隆起型（0-I）", EarlyStageRaisedTypeEnum.getList()),
        EARLY_STAGE_SHALLOW_PHENOTYPE("early_stage_shallow_phenotype", "早期-浅表型（0-II）", EarlyStageShallowPhenotypeEnum.getList()),
        EARLY_STAGE_DEPRESSED_ULCER("early_stage_depressed_ulcer", "早期-凹陷（溃疡）型（0-III）", EarlyStageDepressedUlcerEnum.getList()),
        PROGRESS_PERIOD("progress_period", "进展期", ProgressPeriodEnum.getList());

        private final String key;
        private final String desc;
        private final List<MappingEnum<String, String>> child;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(MacroscopicClassificationEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), e.getChild()))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }

    }

    /**
     * 巨检分型-早期-隆起型（0-I）
     */
    @AllArgsConstructor
    @Getter
    public enum EarlyStageRaisedTypeEnum {

        TITIAN_UPLIFT_TYPE("titian_uplift_type", "有蒂隆起型（0-Ip）"),
        UNTAMED_RAISED_TYPE("untamed_raised_type", "无蒂隆起型（0-Is）"),
        YATI_UPLIFT_TYPE("yati_uplift_type", "亚蒂隆起型（0-lsp）");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(EarlyStageRaisedTypeEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 巨检分型-早期-浅表型（0-II）
     */
    @AllArgsConstructor
    @Getter
    public enum EarlyStageShallowPhenotypeEnum {

        SHALLOW_UPLIFT_TYPE("shallow_uplift_type", "浅表隆起型（0-IIa）"),
        SHALLOW_FLAT_TYPE("shallow_flat_type", "浅表平坦型（0-IIb）"),
        SHALLOW_CONCAVE_TYPE("shallow_concave_type", "浅表凹陷型（0-IIc）"),
        SHALLOW_DEPRESSION_SHALLOW_UPLIFT_TYPE("shallow_depression_shallow_uplift_type", "浅表凹陷＋浅表隆起型（0-IIc+IIa型）"),
        SUPERFICIAL_UPLIFT_TYPE_SUPERFICIAL_DEPRESSION_TYPE("superficial_uplift_type_superficial_depression_type", "浅表隆起型+浅表凹陥型（0-IIa+IIc型）");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(EarlyStageShallowPhenotypeEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 巨检分型-早期-凹陷（溃疡）型（0-III）
     */
    @AllArgsConstructor
    @Getter
    public enum EarlyStageDepressedUlcerEnum {

        SHALLOW_UPLIFT_TYPE("shallow_uplift_type", "早期凹陷（溃疡）型（0-III）"),
        SHALLOW_FLAT_TYPE("shallow_flat_type", "浅表凹陷＋凹陷型（0-IIc+III型）"),
        SHALLOW_CONCAVE_TYPE("shallow_concave_type", "凹陷+浅表凹陷型（0-III+IIc型）");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(EarlyStageDepressedUlcerEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 巨检分型-进展期
     */
    @AllArgsConstructor
    @Getter
    public enum ProgressPeriodEnum {

        NODULAR_PROTUBERANCE_TYPE("nodular_protuberance_type", "I型（结节隆起型）"),
        LOCALIZED_ULCER_TYPE("localized_ulcer_type", "II型（局限溃疡型）"),
        INFILTRATIVE_ULCER_TYPE("infiltrative_ulcer_type", "III型（浸润溃疡型）"),
        DIFFUSE_INFILTRATIVE_TYPE("diffuse_infiltrative_type ", "IV型（弥漫浸润型）");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(ProgressPeriodEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }


    /**
     * 肿瘤大小
     */
    @AllArgsConstructor
    @Getter
    public enum TumorSizeEnum {

        S3("3.5*2.0", "3.5*2.0"),
        S20("20*16*3", "20*16*3");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(TumorSizeEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 肿瘤部位
     */
    @AllArgsConstructor
    @Getter
    public enum TumorLocationEnum {

        GASTROESOPHAGEAL_JUNCTION("gastroesophageal_junction", "胃食管交界部"),
        GREATER_CURVATURE_OF_THE_GASTROESOPHAGEAL_JUNCTION("greater_curvature_of_the_gastroesophageal_junction", "胃食管交界部大弯侧"),
        LESSER_CURVATURE_OF_THE_GASTROESOPHAGEAL_JUNCTION("lesser_curvature_of_the_gastroesophageal_junction", "胃食管交界部小弯侧"),
        LESSER_CURVATURE_SIDE_OF_GASTRIC_ANTRUM("lesser_curvature_side_of_gastric_antrum", "胃窦部小弯侧"),
        GREATER_DUCT_SIDE_OF_GASTRIC_ANTRUM("greater_duct_side_of_gastric_antrum", "胃窦部大管侧"),
        LESSER_CURVATURE_SIDE_OF_GASTRIC_BODY("lesser_curvature_side_of_gastric_body", "胃体部小弯侧"),
        GREATER_CURVATURE_OF_THE_GASTRIC_BODY("greater_curvature_of_the_gastric_body", "胃体部大弯侧"),
        GASTRIC_ANGLE("gastric_angle", "胃角"),
        ANTERIOR_WALL_OF_GASTRIC_ANTRUM("anterior_wall_of_gastric_antrum", "胃窦部前壁"),
        POSTERIOR_WALL_OF_GASTRIC_ANTRUM("posterior_wall_of_gastric_antrum", "胃窦部后壁"),
        ANTERIOR_WALL_OF_GASTRIC_BODY("anterior_wall_of_gastric_body", "胃体部前壁"),
        POSTERIOR_WALL_OF_GASTRIC_BODY("posterior_wall_of_gastric_body", "胃体部后壁"),
        PYLORIC_REGION("pyloric_region", "幽门部"),
        SINUS_BODY_JUNCTION("sinus_body_junction", "窦体交界部"),
        WHOLE_STOMACH_WITH_PARTIAL_ESOPHAGUS("whole_stomach_with_partial_esophagus", "全胃加部分食管");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(TumorLocationEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 标本类型
     */
    @AllArgsConstructor
    @Getter
    public enum TypeOfSpecimenEnum {

        TOTAL_GASTRECTOMY_AND_PARTIAL_ESOPHAGECTOMY("total_gastrectomy_and_partial_esophagectomy", "全胃及部分食管切除标本"),
        TOTAL_GASTRECTOMY("total_gastrectomy", "全胃切除标本"),
        DISTAL_GASTRECTOMY("distal_gastrectomy", "远端胃切除标本"),
        PROXIMAL_GASTRECTOMY("proximal_gastrectomy", "近端胃切除标本"),
        OTHER("other", "其他");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(TypeOfSpecimenEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 术前辅助治疗
     */
    @AllArgsConstructor
    @Getter
    public enum PreoperativeAdjuvantTherapyEnum {

        TARGETED_THERAPY("targeted_therapy", "靶向治疗"),
        NEOADJUVANT_THERAPY("neoadjuvant_therapy", "新辅助治疗"),
        CONVERSION_THERAPY("conversion_therapy", "转化治疗"),
        RADIOTHERAPY("radiotherapy", "放疗"),
        CHEMOTHERAPY("chemotherapy", "化疗"),
        CHEMOTHERAPY_COMBINED_WITH_TARGETED_THERAPY("chemotherapy_combined_with_targeted_therapy", "化疗联合靶向治疗"),
        RADIOTHERAPY_COMBINED_WITH_TARGETED_THERAPY("radiotherapy_combined_with_targeted_therapy", "放疗联合靶向治疗"),
        NONE("none", "无"),
        UNKNOWN("unknown", "未知");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(PreoperativeAdjuvantTherapyEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }


    /**
     * 病理分期-TNM分期
     */
    @AllArgsConstructor
    @Getter
    public enum LesionTnmStageEnum {

        YP("yp", "yp"),
        P("p", "p");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(LesionTnmStageEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 病理分期-T
     */
    @AllArgsConstructor
    @Getter
    public enum LesionTEnum {

        Tx("Tx", "Tx"),
        T0("T0", "T0"),
        TS("Tis", "Tis"),
        T1MI("T1mi", "T1mi"),
        T1A("T1a", "T1a"),
        T1B("T1b", "T1b"),
        T1C("T1c", "T1c"),
        T2("T2", "T2"),
        T2A("T2a", "T2a"),
        T2B("T2b", "T2b"),
        T3("T3", "T3"),
        T4("T4", "T4");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(LesionTEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 病理分期-N
     */
    @AllArgsConstructor
    @Getter
    public enum LesionNEnum {

        NX("Nx", "Nx"),
        N0("N0", "N0"),
        N1("N1", "N1"),
        N2("N2", "N2"),
        N3("N3", "N3");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(LesionNEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 病理分期-M
     */
    @AllArgsConstructor
    @Getter
    public enum LesionMEnum {

        MX("Mx", "Mx"),
        CM0("cM0", "cM0"),
        M1A("M1a", "M1a"),
        M1B("M1b", "M1b"),
        M1C("M1c", "M1c");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(LesionMEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }

    /**
     * 病理分期-总分期
     */
    @AllArgsConstructor
    @Getter
    public enum LesionTotalInstallmentEnum {

        N0("0", "0"),
        IA1("IA1", "IA1"),
        IA2("IA2", "IA2"),
        IA3("IA3", "IA3"),
        IB("IB", "IB"),
        IIA("IIA", "IIA"),
        IIB("IIB", "IIB"),
        IIIA("IIIA", "IIIA"),
        IIIB("IIIB", "IIIB"),
        IIIC("IIIC", "IIIC"),
        IVA("IVA", "IVA"),
        IVB("IVB", "IVB");

        private final String key;
        private final String desc;

        private static final List<MappingEnum<String, String>> TEMP_MAPPING = Arrays.stream(LesionTotalInstallmentEnum.values())
                .map(e -> new MappingEnum<>(e.getKey(), e.getDesc(), null))
                .collect(Collectors.toList());

        public static List<MappingEnum<String, String>> getList() {
            return TEMP_MAPPING;
        }
    }


}
